package com.qf.controller;

import com.qf.entity.Dessertmenu;
import com.qf.entity.UserAttention;
import com.qf.entity.UserCollection;
import com.qf.entity.UserShare;
import com.qf.entity.custom.*;
import com.qf.service.DiscoverService;
import com.qf.tools.JavaWebToken;
import com.qf.tools.ResponseUtils;
import com.qf.tools.ResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author: ZhangYubin
 * @date: 2020/7/21 19:39
 * @description:
 */
@RestController
@RequestMapping("/discover")
public class DiscoverController {
    @Autowired
    private DiscoverService discoverService;

    /**
     * 发现页面精品页面：通过前台点击发现精品，调用此方法，前端不传参数，
     * 返回发现精品页面列表所需数据,包含id，标题，图片，用户名，点击量
     * 若查询数据为空，返回失败信息；
     * 数据不为空，返回成功信息和数据
     *
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/getAllDessertmenu", method = RequestMethod.POST)
    public ResultEntity getAllDessertmenu() throws Exception {
        List<DessertmenuCustom> allDessertmenu = discoverService.findAllDessertmenu();
        if (allDessertmenu != null) {
            return ResultEntity.success(allDessertmenu);
        } else {
            return ResponseUtils.responseClinet(false);
        }
    }

    /**
     * 发现页面精品详情页面：前台点击发现精品页面列表，
     * 以实体类对象形式接收前端数据，传回包含id信息的dessertmenu实体
     * 信息，通过id查询详细信息
     * 返回的一条详细信息的数据
     * 若查询数据为空，返回失败信息；
     * 数据不为空，返回成功信息和数据
     *
     * @param dessertmenu dessertmenu实体类接收json字符串
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/getDessertmenuDetail", method = RequestMethod.POST)
    public ResultEntity getDessertmenuDetail(@RequestBody Dessertmenu dessertmenu) throws Exception {
        Integer id = dessertmenu.getDessertmenuId();
        if (id != null) {
            Dessertmenu dessertmenu1 = discoverService.findDessertmenu(id);
            if (dessertmenu1 != null) {
                return ResultEntity.success(dessertmenu1);
            } else {
                return ResponseUtils.responseClinet(false);
            }
        } else {
            return ResponseUtils.responseClinet(false);
        }
    }


    /**
     * 发现页面关注页面：调用此方法，前端不传参数，
     * 返回发现关注页面列表所需数据,包含id，店铺名， 店铺图片，信息标题，信息图片，发布用户昵称，该信息访问量
     * 若查询数据为空，返回失败信息；
     * 数据不为空，返回成功信息和数据
     *
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/getAllShopDessertUser", method = RequestMethod.POST)
    public ResultEntity getAllShopDessertUser() throws Exception {
        List<ShopCustom> shopCustoms = discoverService.selectShopDessermenuUser();
        if (shopCustoms != null) {
            return ResultEntity.success(shopCustoms);
        } else {
            return ResponseUtils.responseClinet(false);
        }
    }

    /**
     * 发现页面关注页面：前台点击关注执行方法，
     * 以实体类对象形式接收前端数据，传回包含user_id和shop_id信息的userAttention实体信息
     * 若插入数据为false，返回失败信息；
     * 插入数据数据为true，返回成功信息；
     *
     * @param userAttention userAttention实体类接收json字符串
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/addUserAttention", method = RequestMethod.POST)
    public ResultEntity addUserAttention(@RequestBody UserAttentionCustom userAttention) throws Exception {

        String token = userAttention.getToken();
        Integer shopId = userAttention.getShopId();
        if (token != null){
            Map<String, Object> map = JavaWebToken.parserJavaWebToken(token);
            Integer userId = (Integer) map.get("userId");
            UserAttention userAttention1 = new UserAttention();
            userAttention1.setUserId(userId);
            userAttention1.setShopId(shopId);
            boolean b = discoverService.addUserattention(userAttention1);
            if (b = true) {
                return ResponseUtils.responseClinet(true);
            } else {
                return ResponseUtils.responseClinet(false);
            }
        }
        return ResponseUtils.responseClinet(false);
    }

    /**
     * 发现页面晒单页面：前端不传参数，后端查询所有晒单信息（晒单名称， 晒单图片）
     * 根据点赞数排序
     * 若查询数据为空，返回失败信息；
     * 数据不为空，返回成功信息和数据
     *
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/getAllShare", method = RequestMethod.POST)
    public ResultEntity getAllShare() throws Exception {
        List<UserShare> allShareOrderByPoint = discoverService.findAllShareOrderByPoint();
        if (allShareOrderByPoint != null) {
            return ResultEntity.success(allShareOrderByPoint);
        } else {
            return ResponseUtils.responseClinet(false);
        }
    }

    /**
     * 发现页面晒单页面：前台点击收藏执行方法，
     * 以实体类对象形式接收前端数据，传回包含user_id和Share_Id信息的userCollection实体信息
     * 判断user_id和Share_Id信息是否为空
     * 若插入数据为false，返回失败信息
     * 插入数据数据为true，返回成功信息
     *
     * @param userCollection userAttention实体类接收json字符串
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/addUserCollection", method = RequestMethod.POST)
    public ResultEntity addUserCollection(@RequestBody UserCollectionCustom userCollection) throws Exception {

        String token = userCollection.getToken();
        Integer shareId = userCollection.getShareId();
        if (token != null) {
            Map<String, Object> map = JavaWebToken.parserJavaWebToken(token);
            Integer userId = (Integer) map.get("userId");
            if (userId != null && shareId != null) {
                Date date = new Date();//获得系统时间.
                SimpleDateFormat sdf =   new SimpleDateFormat( " yyyy-MM-dd " );
                String nowTime = sdf.format(date);
                Date time = sdf.parse( nowTime );
                userCollection.setCollectCreatetime(time);
                boolean b = discoverService.addUserCollection(userCollection);
                if (b = true) {
                    return ResponseUtils.responseClinet(true);
                } else {
                    return ResponseUtils.responseClinet(false);
                }
            } else {
                return ResponseUtils.responseClinet(false);
            }
        }else {
            return ResponseUtils.responseClinet(false);
        }
    }

    /**
     * 发现页面晒单页面:添加晒单信息 shareId,shareUserId,shareWords,shareImages
     *        以实体类对象形式接收前端传输的数据，解析得到属性数据
     *        若插入数据为false，返回失败信息；
     *        插入数据数据为true，返回成功信息；
     *
     * @param userShare
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/addUserShare", method = RequestMethod.POST)
    public ResultEntity addUserShare(@RequestBody UserShare userShare) throws Exception {

        Integer shareId = userShare.getShareId();
        Integer shareUserId = userShare.getShareUserId();
        String shareWords = userShare.getShareWords();
        String shareImages = userShare.getShareImages();
        if (shareId != null && shareUserId != null && shareWords != null && shareWords != "" && shareImages != null && shareImages != ""){
            boolean b = discoverService.addUserShare(userShare);
            if (b = true) {
                return ResponseUtils.responseClinet(true);
            } else {
                return ResponseUtils.responseClinet(false);
            }
        }else {
            return ResponseUtils.responseClinet(false);
        }

    }

    /**
     * 发现页面晒单页面:点击红心，增加点击量
     *      以实体类对象形式接收前端传输的数据，解析得到属性数据
     *      若增加数据为false，返回失败信息；
     *      增加数据数据为true，返回成功信息；
     *
     * @param userShare
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/modifyUserShare", method = RequestMethod.POST)
    public ResultEntity modifyUserShare(@RequestBody UserShareCustom userShare) throws Exception {

        String token = userShare.getToken();
        Integer shareId = userShare.getShareId();
        if (token != null) {
            Map<String, Object> map = JavaWebToken.parserJavaWebToken(token);
            Integer shareUserId = (Integer) map.get("userId");
            UserShare userShare1 = new UserShare();
            userShare1.setShareUserId(shareUserId);
            userShare1.setShareId(shareId);
            boolean b = discoverService.modifyUserShare(userShare1);
            if (b = true) {
                return ResponseUtils.responseClinet(true);
            } else {
                return ResponseUtils.responseClinet(false);
            }
        }else {
            return ResponseUtils.responseClinet(false);
        }
    }

    /**
     * 发现页面上新页面：查询上新商品和店铺，前端不传参数，
     * 返回发现上新页面列表所需最新商品信息和对应店铺信息
     * 若查询数据为空，返回失败信息；
     * 数据不为空，返回成功信息和数据
     *
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/getAllShopProductIsNew", method = RequestMethod.POST)
    public ResultEntity getAllShopProductIsNew() {
        List<ShopCustom> allShopProductIsNew = discoverService.findAllShopProductIsNew();
        if (allShopProductIsNew != null) {
            return ResultEntity.success(allShopProductIsNew);
        } else {
            return ResponseUtils.responseClinet(false);
        }
    }

    /**
     * 发现页面推荐页面：查询推荐商品和店铺，前端不传参数，
     * 返回发现推荐页面列表所需推荐商品信息和对应店铺信息
     * 若查询数据为空，返回失败信息；
     * 数据不为空，返回成功信息和数据
     *
     * @return 返回ResultEntity类型的成功或者失败信息并选择是否需要携带数据
     * @throws Exception
     */
    @RequestMapping(value = "/getAllShopProductIsRecommend", method = RequestMethod.POST)
    public ResultEntity getAllShopProductIsRecommend() {
        List<ShopCustom> allShopProductIsNew = discoverService.findAllShopProductIsRecommend();
        if (allShopProductIsNew != null) {
            return ResultEntity.success(allShopProductIsNew);
        } else {
            return ResponseUtils.responseClinet(false);
        }
    }
}
